這篇將會著重在 class 的介紹,帶入基本的物件導向觀念(Object-Oriented Programming)
基本觀念
一個 class 的概念,通常包含了 state 跟 behavior ,state 通常就是該 class 的常用變數,會使用到的或者跟這個 class 有關的都會在裡面做宣告。而 behavior 很像是這個 class能夠做到哪些事情,或者一些相關的函式 (member function)
class car {
private var wheels: Int = 4
// member function
fun printWheelsNum() {
print("The number of wheels: "+wheels)
}
}
fun main(args: Array<String>) {
val myCar = car() // create obj object of myClass class
myCar.printWheelsNum()
}
class 的構造就是把一個程式的想法物件模組化,先規劃好一些功能的藍圖,之後將它給建構出來。上面的程式碼就是實作了一個 class,這個 class 的藍圖就是基於如何去形容一輛車子,車子有許多的零件,包含了輪子、品牌、速度、顏色 ... 等眾多的元件,透過 class 可以有架構的去闡述這件事情,今天我的程式碼只要知道這台車的輪子,那我就可以宣告一個變數 wheels 去紀錄,並且實作一個 member function 將該輪子數給印出來。
那如果今天還想要知道該品牌是什麼呢?如果今天想要加入一個 funciton 做出"幫車子加油 fillUp()" 的動作呢?這些都能夠透過 class 將概念寫出來,當然啦,藍圖越有條理越簡單,寫出來的 class 會越容易去維護唷!
kotlin 的 class 可以有很多的 constructor ,使用 init 來宣告內容,constructor 就是當該 class 被宣告的時候,會在當下就直接執行 constructor 的內容。通常會用來對該 class 賦值用,當然也可以有其他的用法唷!class InitOrderDemo(name: String) {
val firstProperty = "First property: $name".also(::println)
init {
println("First initializer block that prints ${name}")
}
val secondProperty = "Second property: ${name.length}".also(::println)
init {
println("Second initializer block that prints ${name.length}")
}
}
inner class
class BMW {
private val brand: String = "BMW"
inner class car {
fun brand() = brand
}
inner class motorcycle {
fun brand() = brand
}
}
inner class 的意思就是 class 裡面還有一個 class,裡面的那層 class 可能會需要使用到外面 class 的變數,當宣告成 inner 的時候,才有辦法去拿取外面class的變數唷
data class
data class 看起來是專門用來存放資料的 class,不去做任何 function 上的實作,在 Kotlin 上也有簡化 class constructor 的用途,讓塞資料更加方便快速。
data class Person(val name: String, val age: Int)